@附加资源("../../图片")
类 舞台精灵:游戏精灵
	变量 舞台宽:整数
	变量 舞台高:整数

	变量 舞台背景:背景精灵
	变量 玩家:玩家精灵

	变量 子弹池:子弹集合
	变量 子弹越界池:子弹集合

	变量 敌机池:敌机集合
	变量 敌机越界池:敌机集合

	变量 子弹图片:位图对象?
	变量 敌机图片:位图对象?

	变量 子弹数量:整数
	变量 子弹越界数量:整数
	变量 敌机数量:整数
	变量 敌机越界数量:整数
	变量 已摧毁敌机:整数

	变量 子弹密集:整数 = 100
	变量 敌机密集:整数 = 500

	变量 子弹池占用:逻辑型 = 假
	变量 越界池占用:逻辑型 = 假
	变量 敌机池占用:逻辑型 = 假
	
	变量 并发1:并发集合

	变量 火力全开:逻辑型 = 假

	事件 舞台精灵:初始化(环境 : 安卓环境)
		舞台背景.图片 = 位图对象.从资源文件创建位图(环境,"bg.jpg")
		玩家.图片 = 位图对象.从资源文件创建位图(环境,"j1.png")
		子弹图片 = 位图对象.从资源文件创建位图(环境,"zd.png")
		敌机图片 = 位图对象.从资源文件创建位图(环境,"dj.png")
		//  开始画背景，背景开始移动
		舞台背景.背景移动()

		// 向按下的位置偏移
		玩家.目标偏移()

		添加子弹()
		添加敌机()

	结束 事件

	事件 舞台精灵:绘制到场景(画布 : 画布对象,画笔 : 画笔对象)
		舞台背景.绘制到场景(画布,画笔)
		玩家.绘制到场景(画布,画笔)
		子弹数量 = 子弹池.长度
		子弹越界数量 = 子弹越界池.长度
		敌机数量 = 敌机池.长度
		敌机越界数量 = 敌机越界池.长度

		如果 敌机池占用
			延时(200)
			返回
		否则
			敌机池占用 = 真
			获取线程同步锁(敌机池)
			循环(敌机池 -> 敌机)
				敌机.绘制到场景(画布,画笔)
				敌机.刷新坐标()
			结束 循环
			释放线程同步锁()
			敌机池占用 = 假
		结束 如果
		如果 子弹池占用
			延时(200)
			返回
		否则
			子弹池占用 = 真
			获取线程同步锁(子弹池)
			循环(子弹池 -> 子弹)
				子弹.绘制到场景(画布,画笔)
				子弹.刷新坐标()
			结束 循环
			释放线程同步锁()
			子弹池占用 = 假
		结束 如果


		子弹越界()
		敌机越界()
		越界清理()
		碰撞()
		//添加子弹2()
	结束 事件

	方法 添加子弹2()
		提交到缓存线程池运行()
		循环(a,0,100)
			延时(子弹密集)
			变量 子弹实体:子弹精灵
			子弹实体.横坐标 = 玩家.x - 100f
			子弹实体.纵坐标 = 玩家.y - 220f
			子弹实体.图片 = 子弹图片
			获取线程同步锁(子弹池)
			子弹池.添加成员(子弹实体)
			释放线程同步锁()
		结束 循环
		结束提交到缓存线程池()
	结束 方法

	事件 舞台精灵:场景大小改变(宽度 : 整数,高度 : 整数)
		舞台宽 = 宽度
		舞台高 = 高度
		舞台背景.场景大小改变(宽度,高度)
		玩家.场景大小改变(宽度,高度)
	结束 事件

	事件 舞台精灵:玩家操作(来源事件 : 触摸事件)
		玩家.玩家操作(来源事件)
	结束 事件

	//  复用子弹方法待完善
	方法 添加子弹()
		提交到缓存线程池运行()
		循环(真)
			延时(子弹密集)
			变量 子弹实体:子弹精灵
			子弹实体.横坐标 = 玩家.x - 53f
			子弹实体.纵坐标 = 玩家.y - 220f
			子弹实体.图片 = 子弹图片
			变量 子弹2:子弹精灵
			子弹2.横坐标 = 玩家.x - 53f - 200f
			子弹2.纵坐标 = 玩家.y - 220f
			子弹2.图片 = 子弹图片
			变量 子弹3:子弹精灵
			子弹3.横坐标 = 玩家.x - 53f + 200f
			子弹3.纵坐标 = 玩家.y - 220f
			子弹3.图片 = 子弹图片
			
			如果 子弹池占用
			否则
				子弹池占用 = 真
				获取线程同步锁(子弹池)
				子弹池.添加成员(子弹实体)
				如果 火力全开
					子弹池.添加成员(子弹2)
					子弹池.添加成员(子弹3)
				结束 如果
				释放线程同步锁()
				子弹池占用 = 假
			结束 如果
		结束 循环
		结束提交到缓存线程池()
	结束 方法

	方法 子弹越界()
		获取线程同步锁(子弹池)
		循环(子弹池 -> 子弹1)
			如果 子弹1.纵坐标 < 0
				获取线程同步锁(子弹越界池)
				子弹越界池.添加成员(子弹1)
				释放线程同步锁()
			结束 如果
		结束 循环
		释放线程同步锁()
	结束 方法

	方法 添加敌机()
		提交到缓存线程池运行()
		循环(真)
			延时(敌机密集)
			变量 敌机1:敌机精灵
			敌机1.x坐标 = 取随机数(敌机1.宽,舞台宽-敌机1.宽)
			敌机1.y坐标 = -100
			敌机1.图片 = 敌机图片
			获取线程同步锁(敌机池)
			敌机池.添加成员(敌机1)
			释放线程同步锁()
		结束 循环
		结束提交到缓存线程池()
	结束 方法

	方法 敌机越界()
		获取线程同步锁(敌机池)
		循环(敌机池 -> 敌机)
			如果 敌机.y坐标 > 2000
				获取线程同步锁(敌机越界池)
				敌机越界池.添加成员(敌机)
				释放线程同步锁()
			结束 如果
		结束 循环
		释放线程同步锁()
	结束 方法

	方法 碰撞()
		提交到缓存线程池运行()
		循环(敌机池 -> 敌机)
			循环(子弹池 -> 子弹)
				如果 敌机.矩阵.矩形是否相交(子弹.矩阵)
					自增(已摧毁敌机)
					获取线程同步锁(敌机越界池)
					敌机越界池.添加成员(敌机)
					释放线程同步锁()
					获取线程同步锁(子弹越界池)
					子弹越界池.添加成员(子弹)
					释放线程同步锁()
				结束 如果
			结束 循环
		结束 循环
		结束提交到缓存线程池()
	结束 方法

	方法 越界清理()
		提交到缓存线程池运行()
		循环(真)
			延时(20)
			如果 子弹越界池.长度 > 0
				循环(a,0,子弹越界池.长度)
					变量 越界子弹:子弹精灵 = 子弹越界池[a]
					获取线程同步锁(子弹池)
					子弹池.删除成员2(越界子弹)
					释放线程同步锁()
					获取线程同步锁(子弹越界池)
					子弹越界池.删除成员2(越界子弹)
					释放线程同步锁()
				结束 循环
			结束 如果


			如果 敌机越界池.长度 > 0
				循环(a,0,敌机越界池.长度)
					变量 越界敌机:敌机精灵 = 敌机越界池[a]
					获取线程同步锁(敌机池)
					敌机池.删除成员2(越界敌机)
					释放线程同步锁()
					获取线程同步锁(敌机越界池)
					敌机越界池.删除成员2(越界敌机)
					释放线程同步锁()
				结束 循环
			结束 如果

		结束 循环
		结束提交到缓存线程池()
	结束 方法



结束 类